我們稍早前介紹 Active Model
的 object 結構時,有提到由於他並不是我們所熟知的從 DB 叫出來的那種 model,在 console 裡資料的顯示上並不那麽直觀,而是很大一包很亂,怎麼辦?
既然如此,我們自行定義就好囉~。
事實上,Ruby 在 console 裡顯示任何一個 object 時,會先去 call 這個物件的 inspect
方法,然後把這 inspect
的回傳值當作這個物件的樣子 show 出來:
class FakeObject
# 建一個 class 然後去修改他的 inspect,看看這個物件到頭來會變成什麼樣子
def inspect
"<<This is Sparta!!>>"
end
end
obj = FakeObject.new
=> <<This is Sparta!!>>
# 就會顯示出 This is Sparta!! 的樣子。
obj.class
=> FakeObject
# 但他實際上仍然是這個 FakeObject 物件。
所以回過頭來,如果我們想要我們自己做的 Active Model
可以像一般 model 一樣,直觀簡潔的 show 出每個 attribute 的值,我們也可以這樣做:
class MyClass
include ActiveModel::Model
include ActiveModel::Attributes
attribute :title
attribute :content
def inspect
"#<#{self.class} #{attributes}>"
end
end
MyClass.new title: '標題唷', content: '內容唷'
=> #<MyClass {"title"=>"標題唷", "content"=>"內容唷"}>
如此重新定義過 inspect 後,在 console 裡面顯示出的樣子就會像是 model 一樣簡潔了!